home *** CD-ROM | disk | FTP | other *** search
/ Linux Cubed Series 3: Developer Tools / Linux Cubed Series 3 - Developer Tools.iso / devel / make / icmake-6.000 / icmake-6 / icmake / comp / twoargs.c < prev    next >
Encoding:
C/C++ Source or Header  |  1994-02-08  |  1.7 KB  |  64 lines

  1. /*
  2.                                 T W O A R G S . C
  3. */
  4.  
  5. #include "iccomp.h"
  6.  
  7. ESTRUC_ *twoargs(type, larg, rarg)
  8.     E_TYPE_
  9.         type;
  10.     ESTRUC_
  11.         *larg,
  12.         *rarg;
  13. {
  14.     register int
  15.         ok;
  16.  
  17.     etoc(larg);                             /* arg to stack */
  18.     etoc(rarg);                             /* arg to stack */
  19.  
  20.     switch (type)
  21.     {
  22.         case f_fgets:
  23.             ok = test_type(larg, e_str) && test_type(rarg, e_int);
  24.         break;
  25.  
  26.         case f_element:                     /* f_element */
  27.                                             /* first arg must be int */
  28.             if ( (ok = test_type(larg, e_int)) )
  29.             {                               /* second arg == list: ok */
  30.                 if (!(ok = test_type(rarg, e_list)))
  31.                 {                           /* second arg == string: ok */
  32.                     ok = test_type(rarg, e_str);
  33.                     type = f_str_el;        /* string element requested */
  34.                 }
  35.             }
  36.         break;
  37.  
  38.         default:
  39.             /*
  40.                 case f_fields:
  41.                 case f_c_ext:
  42.                 case f_c_base:
  43.                 case f_c_path:
  44.                 case f_substr:
  45.             */
  46.             ok = larg->type & rarg->type & e_str;
  47.     }
  48.  
  49.     if (ok)
  50.     {
  51.         catcode(rarg, larg);                /* make one code vector */
  52.         if (type == f_substr)               /* hidden func */
  53.             callhidden (he_substr, rarg);
  54.         else                                /* real rss func */
  55.             callrss(rarg, type);
  56.     }
  57.     else
  58.     {
  59.         semantic(type_conflict, funstring[type]);
  60.         discard(larg);
  61.     }
  62.     return (rarg);
  63. }
  64.